x86/powernow: fix machine shutdown
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 27 Oct 2008 13:20:52 +0000 (13:20 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 27 Oct 2008 13:20:52 +0000 (13:20 +0000)
cpufreq_del_cpu() calls cpufreq_driver->exit() without checking
whether an exit() handler is present, and by adding an exit() handler
to powernow we can at once close the potential memory leak.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen/arch/x86/acpi/cpufreq/powernow.c

index 9d9897be6143d6827c0aed84cac0d099ba63ea14..b43de6a5cfe27a00668df1a2796cda9335cc80da 100644 (file)
@@ -229,9 +229,23 @@ err_unreg:
     return result;
 }
 
+static int powernow_cpufreq_cpu_exit(struct cpufreq_policy *policy)
+{
+    struct powernow_cpufreq_data *data = drv_data[policy->cpu];
+
+    if (data) {
+        drv_data[policy->cpu] = NULL;
+        xfree(data->freq_table);
+        xfree(data);
+    }
+
+    return 0;
+}
+
 static struct cpufreq_driver powernow_cpufreq_driver = {
     .target = powernow_cpufreq_target,
     .init   = powernow_cpufreq_cpu_init,
+    .exit   = powernow_cpufreq_cpu_exit
 };
 
 int powernow_cpufreq_init(void)